<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Nginx 中文文档 - Module ngx_http_grpc_module | Docs4dev</title>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="true">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta property="og:type" content="website">
<meta property="og:title" content="Nginx 中文文档 - Module ngx_http_grpc_module">
<meta property="og:url" content="https://www.docs4dev.com/docs/zh/nginx/current/reference/http-ngx_http_grpc_module.html">
<meta property="og:site_name" content="Docs4dev">
<meta property="og:locale" content="zh_CN">
<meta name="twitter:card" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta name="generator" content="Docs4dev template engine">
<link rel="stylesheet" href="static/css/app.min.css">
<link rel="shortcut icon" href="https://www.docs4dev.com/static/images/favicon.ico" type="image/x-icon">
<script async="" src="static/js/js.js"></script>
<script async="" src="static/js/adsbygoogle.js" crossorigin="anonymous"></script>
<script>
    window.dataLayer = window.dataLayer || [];

    function gtag() {
      dataLayer.push(arguments);
    }

    gtag('js', new Date());
    gtag('config', 'UA-129571937-1');
  </script>
<link rel="amphtml" href="https://www.docs4dev.com/amp/docs/zh/nginx/current/reference/http-ngx_http_grpc_module.html">
<script type="application/ld+json">{"name":null,"headline":"Nginx 中文文档-Module ngx_http_grpc_module","inLanguage":"zh-CN","version":"current","image":"/static/icon/icon-nginx.svg","datePublished":"2021-05-20T12:51:01Z","dateCreated":"2021-05-20T12:51:01Z","dateModified":"2021-07-07T12:48:29Z","@context":"https://schema.org/","@type":"APIReference","abstract":"Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。"}</script>
</head>
<body>
<div class="book with-summary">
<div class="book-summary">
<div class="logo">
<a href="index.html" style="color: inherit;">
<img src="static/picture/icon-nginx.svg" style="width: 48px; height: 48px;" alt="Logo">
</a>
<b style="color: inherit; margin-left: 8px;">Nginx 中文文档</b>
</div>
<div class="item">
<div>
<label for="version">版本</label>
<select id="version" onchange="onVersionChange(this)">
<option value="current" selected="selected">current</option>
</select>
</div>
<div style="margin-top: 8px;">
<label for="language">语言</label>
<select id="language" onchange="onLangChange(this)" value="zh">
<option value="en">English</option>
<option value="zh" selected="selected">中文</option>
</select>
</div>

</div>
<div class="item menus">
<a title="Table of Contents" style="margin-right: 8px;" href="index.html">
<i class="fa fa-chevron-left"></i>
<span style="margin-left: 2px;">返回目录</span>
</a>
</div>
<nav role="navigation" id="navigation">
<ul class="summary">
<li class="chapter"> <a href="install.html" title="Introduction"> Introduction </a>
<ul class="articles">
<li class="chapter"> <a href="install.html" title="Installing nginx"> Installing nginx </a> </li>
<li class="chapter"> <a href="configure.html" title="从源代码构建  Nginx"> 从源代码构建 Nginx </a> </li>
<li class="chapter"> <a href="beginners_guide.html" title="Beginner's Guide"> Beginner's Guide </a> </li>
<li class="chapter"> <a href="control.html" title="Controlling nginx"> Controlling nginx </a> </li>
<li class="chapter"> <a href="events.html" title="连接处理方法"> 连接处理方法 </a> </li>
<li class="chapter"> <a href="hash.html" title="设置哈希"> 设置哈希 </a> </li>
<li class="chapter"> <a href="debugging_log.html" title="调试日志"> 调试日志 </a> </li>
<li class="chapter"> <a href="syslog.html" title="记录到系统日志"> 记录到系统日志 </a> </li>
<li class="chapter"> <a href="syntax.html" title="配置文件测量单位"> 配置文件测量单位 </a> </li>
<li class="chapter"> <a href="switches.html" title="Command-line parameters"> Command-line parameters </a> </li>
<li class="chapter"> <a href="windows.html" title="Windows 版  Nginx"> Windows 版 Nginx </a> </li>
<li class="chapter"> <a href="http-request_processing.html" title="Nginx 如何处理请求"> Nginx 如何处理请求 </a> </li>
<li class="chapter"> <a href="http-server_names.html" title="Server names"> Server names </a> </li>
<li class="chapter"> <a href="http-load_balancing.html" title="使用  Nginx 作为  HTTP 负载均衡器"> 使用 Nginx 作为 HTTP 负载均衡器 </a> </li>
<li class="chapter"> <a href="http-configuring_https_servers.html" title="配置  HTTPS 服务器"> 配置 HTTPS 服务器 </a> </li>
<li class="chapter"> <a href="stream-stream_processing.html" title="Nginx 如何处理  TCP/UDP 会话"> Nginx 如何处理 TCP/UDP 会话 </a> </li>
<li class="chapter"> <a href="njs-index.html" title="用  njs 编写脚本"> 用 njs 编写脚本 </a> </li>
</ul> </li>
<li class="chapter"> <a href="howto_build_on_win32.html" title="How-To"> How-To </a>
<ul class="articles">
<li class="chapter"> <a href="howto_build_on_win32.html" title="使用  Visual C 在  Win32 平台上构建  Nginx"> 使用 Visual C 在 Win32 平台上构建 Nginx </a> </li>
<li class="chapter"> <a href="nginx_dtrace_pid_provider.html" title="使用  DTrace pid 提供程序调试  nginx"> 使用 DTrace pid 提供程序调试 nginx </a> </li>
<li class="chapter"> <a href="http-converting_rewrite_rules.html" title="转换重写规则"> 转换重写规则 </a> </li>
<li class="chapter"> <a href="http-websocket.html" title="WebSocket proxying"> WebSocket proxying </a> </li>
</ul> </li>
<li class="chapter"> <a href="contributing_changes.html" title="Development"> Development </a>
<ul class="articles">
<li class="chapter"> <a href="contributing_changes.html" title="Contributing Changes"> Contributing Changes </a> </li>
<li class="chapter"> <a href="dev-development_guide.html" title="Development guide"> Development guide </a> </li>
</ul> </li>
<li class="chapter"> <a href="dirindex.html" title="Modules reference"> Modules reference </a>
<ul class="articles">
<li class="chapter"> <a href="dirindex.html" title="指令的字母索引"> 指令的字母索引 </a> </li>
<li class="chapter"> <a href="varindex.html" title="变量按字母顺序索引"> 变量按字母顺序索引 </a> </li>
<li class="chapter"> <a href="ngx_core_module.html" title="Core functionality"> Core functionality </a> </li>
<li class="chapter"> <a href="http-ngx_http_core_module.html" title="ngx_http_core_module"> ngx_http_core_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_access_module.html" title="ngx_http_access_module"> ngx_http_access_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_addition_module.html" title="ngx_http_addition_module"> ngx_http_addition_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_api_module.html" title="ngx_http_api_module"> ngx_http_api_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_basic_module.html" title="ngx_http_auth_basic_module"> ngx_http_auth_basic_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_jwt_module.html" title="ngx_http_auth_jwt_module"> ngx_http_auth_jwt_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_request_module.html" title="ngx_http_auth_request_module"> ngx_http_auth_request_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_autoindex_module.html" title="ngx_http_autoindex_module"> ngx_http_autoindex_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_browser_module.html" title="ngx_http_browser_module"> ngx_http_browser_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_charset_module.html" title="ngx_http_charset_module"> ngx_http_charset_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_dav_module.html" title="ngx_http_dav_module"> ngx_http_dav_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_empty_gif_module.html" title="ngx_http_empty_gif_module"> ngx_http_empty_gif_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_f4f_module.html" title="ngx_http_f4f_module"> ngx_http_f4f_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_fastcgi_module.html" title="ngx_http_fastcgi_module"> ngx_http_fastcgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_flv_module.html" title="ngx_http_flv_module"> ngx_http_flv_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geo_module.html" title="ngx_http_geo_module"> ngx_http_geo_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geoip_module.html" title="ngx_http_geoip_module"> ngx_http_geoip_module </a> </li>
<li class="chapter"> <a href="" title="ngx_http_grpc_module"> ngx_http_grpc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gunzip_module.html" title="ngx_http_gunzip_module"> ngx_http_gunzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_module.html" title="ngx_http_gzip_module"> ngx_http_gzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_static_module.html" title="ngx_http_gzip_static_module"> ngx_http_gzip_static_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_headers_module.html" title="ngx_http_headers_module"> ngx_http_headers_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_hls_module.html" title="ngx_http_hls_module"> ngx_http_hls_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_image_filter_module.html" title="ngx_http_image_filter_module"> ngx_http_image_filter_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_index_module.html" title="ngx_http_index_module"> ngx_http_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_js_module.html" title="ngx_http_js_module"> ngx_http_js_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_keyval_module.html" title="ngx_http_keyval_module"> ngx_http_keyval_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_conn_module.html" title="ngx_http_limit_conn_module"> ngx_http_limit_conn_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_req_module.html" title="ngx_http_limit_req_module"> ngx_http_limit_req_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_log_module.html" title="ngx_http_log_module"> ngx_http_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_map_module.html" title="ngx_http_map_module"> ngx_http_map_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_memcached_module.html" title="ngx_http_memcached_module"> ngx_http_memcached_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mirror_module.html" title="ngx_http_mirror_module"> ngx_http_mirror_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mp4_module.html" title="ngx_http_mp4_module"> ngx_http_mp4_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_perl_module.html" title="ngx_http_perl_module"> ngx_http_perl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_proxy_module.html" title="ngx_http_proxy_module"> ngx_http_proxy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_random_index_module.html" title="ngx_http_random_index_module"> ngx_http_random_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_realip_module.html" title="ngx_http_realip_module"> ngx_http_realip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_referer_module.html" title="ngx_http_referer_module"> ngx_http_referer_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_rewrite_module.html" title="ngx_http_rewrite_module"> ngx_http_rewrite_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_scgi_module.html" title="ngx_http_scgi_module"> ngx_http_scgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_secure_link_module.html" title="ngx_http_secure_link_module"> ngx_http_secure_link_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_session_log_module.html" title="ngx_http_session_log_module"> ngx_http_session_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_slice_module.html" title="ngx_http_slice_module"> ngx_http_slice_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_spdy_module.html" title="ngx_http_spdy_module"> ngx_http_spdy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_split_clients_module.html" title="ngx_http_split_clients_module"> ngx_http_split_clients_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssi_module.html" title="ngx_http_ssi_module"> ngx_http_ssi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssl_module.html" title="ngx_http_ssl_module"> ngx_http_ssl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_status_module.html" title="ngx_http_status_module"> ngx_http_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_stub_status_module.html" title="ngx_http_stub_status_module"> ngx_http_stub_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_sub_module.html" title="ngx_http_sub_module"> ngx_http_sub_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_module.html" title="ngx_http_upstream_module"> ngx_http_upstream_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_conf_module.html" title="ngx_http_upstream_conf_module"> ngx_http_upstream_conf_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_hc_module.html" title="ngx_http_upstream_hc_module"> ngx_http_upstream_hc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_userid_module.html" title="ngx_http_userid_module"> ngx_http_userid_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_uwsgi_module.html" title="ngx_http_uwsgi_module"> ngx_http_uwsgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_v2_module.html" title="ngx_http_v2_module"> ngx_http_v2_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_xslt_module.html" title="ngx_http_xslt_module"> ngx_http_xslt_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_core_module.html" title="ngx_mail_core_module"> ngx_mail_core_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_auth_http_module.html" title="ngx_mail_auth_http_module"> ngx_mail_auth_http_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_proxy_module.html" title="ngx_mail_proxy_module"> ngx_mail_proxy_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_ssl_module.html" title="ngx_mail_ssl_module"> ngx_mail_ssl_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_imap_module.html" title="ngx_mail_imap_module"> ngx_mail_imap_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_pop3_module.html" title="ngx_mail_pop3_module"> ngx_mail_pop3_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_smtp_module.html" title="ngx_mail_smtp_module"> ngx_mail_smtp_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_core_module.html" title="ngx_stream_core_module"> ngx_stream_core_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_access_module.html" title="ngx_stream_access_module"> ngx_stream_access_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geo_module.html" title="ngx_stream_geo_module"> ngx_stream_geo_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geoip_module.html" title="ngx_stream_geoip_module"> ngx_stream_geoip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_js_module.html" title="ngx_stream_js_module"> ngx_stream_js_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_keyval_module.html" title="ngx_stream_keyval_module"> ngx_stream_keyval_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_limit_conn_module.html" title="ngx_stream_limit_conn_module"> ngx_stream_limit_conn_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_log_module.html" title="ngx_stream_log_module"> ngx_stream_log_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_map_module.html" title="ngx_stream_map_module"> ngx_stream_map_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_proxy_module.html" title="ngx_stream_proxy_module"> ngx_stream_proxy_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_realip_module.html" title="ngx_stream_realip_module"> ngx_stream_realip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_return_module.html" title="ngx_stream_return_module"> ngx_stream_return_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_split_clients_module.html" title="ngx_stream_split_clients_module"> ngx_stream_split_clients_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_module.html" title="ngx_stream_ssl_module"> ngx_stream_ssl_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_preread_module.html" title="ngx_stream_ssl_preread_module"> ngx_stream_ssl_preread_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_module.html" title="ngx_stream_upstream_module"> ngx_stream_upstream_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_hc_module.html" title="ngx_stream_upstream_hc_module"> ngx_stream_upstream_hc_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_zone_sync_module.html" title="ngx_stream_zone_sync_module"> ngx_stream_zone_sync_module </a> </li>
<li class="chapter"> <a href="ngx_google_perftools_module.html" title="ngx_google_perftools_module"> ngx_google_perftools_module </a> </li>
</ul> </li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<header class="book-header">
<div class="dropdown pull-right js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-globe"></i>
</a>
<div class="dropdown-menu dropdown-left">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('zh_CN')">中文</button>
</div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('en_US')">English</button>
</div>
</div>
</div>
<a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign up" href="register.html">
<i class="fa fa-sign-in"></i> <span>注册</span>
</a>
 <a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign in" href="register.html">
<i class="fa fa-sign-in"></i>
<span>登录</span>
</a>
<a class="btn pull-left js-toolbar-action btn-summary" href="#"><i class="fa fa-align-justify"></i></a>
<div class="dropdown pull-left font-settings js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Font Settings" href="#">
<i class="fa fa-font"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-2 font-reduce">A</button>
<button class="button size-2 font-enlarge">A</button>
</div>
<div class="buttons">
<button class="button size-2 family-serif">Serif</button>
<button class="button size-2 family-sans">Sans</button>
</div>
<div class="buttons">
<button class="button size-3 theme-white">White</button>
<button class="button size-3 theme-sepia">Sepia</button>
<button class="button size-3 theme-night">Night</button>
</div>
</div>
</div>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
<div class="dropdown pull-left js-toolbar-action mobile">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-chevron-down"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<a class="button size-1" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
</div>
</div>
</div>
<div id="autocomplete" class="pull-right"></div>
<span id="toolbar-title"></span>
</header>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<div id="content">
<h1>Module ngx_http_grpc_module</h1>
<div><ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6108808167664152" data-ad-slot="6964403648"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
<div><ul>
<li><a href="#example">Example Configuration</a></li>
<li><a href="#directives">Directives</a>
<ul>
<li><a href="#grpc_bind">grpc_bind</a></li>
<li><a href="#grpc_buffer_size">grpc_buffer_size</a></li>
<li><a href="#grpc_connect_timeout">grpc_connect_timeout</a></li>
<li><a href="#grpc_hide_header">grpc_hide_header</a></li>
<li><a href="#grpc_ignore_headers">grpc_ignore_headers</a></li>
<li><a href="#grpc_intercept_errors">grpc_intercept_errors</a></li>
<li><a href="#grpc_next_upstream">grpc_next_upstream</a></li>
<li><a href="#grpc_next_upstream_timeout">grpc_next_upstream_timeout</a></li>
<li><a href="#grpc_next_upstream_tries">grpc_next_upstream_tries</a></li>
<li><a href="#grpc_pass">grpc_pass</a></li>
<li><a href="#grpc_pass_header">grpc_pass_header</a></li>
<li><a href="#grpc_read_timeout">grpc_read_timeout</a></li>
<li><a href="#grpc_send_timeout">grpc_send_timeout</a></li>
<li><a href="#grpc_set_header">grpc_set_header</a></li>
<li><a href="#grpc_socket_keepalive">grpc_socket_keepalive</a></li>
<li><a href="#grpc_ssl_certificate">grpc_ssl_certificate</a></li>
<li><a href="#grpc_ssl_certificate_key">grpc_ssl_certificate_key</a></li>
<li><a href="#grpc_ssl_ciphers">grpc_ssl_ciphers</a></li>
<li><a href="#grpc_ssl_crl">grpc_ssl_crl</a></li>
<li><a href="#grpc_ssl_name">grpc_ssl_name</a></li>
<li><a href="#grpc_ssl_password_file">grpc_ssl_password_file</a></li>
<li><a href="#grpc_ssl_protocols">grpc_ssl_protocols</a></li>
<li><a href="#grpc_ssl_server_name">grpc_ssl_server_name</a></li>
<li><a href="#grpc_ssl_session_reuse">grpc_ssl_session_reuse</a></li>
<li><a href="#grpc_ssl_trusted_certificate">grpc_ssl_trusted_certificate</a></li>
<li><a href="#grpc_ssl_verify">grpc_ssl_verify</a></li>
<li><a href="#grpc_ssl_verify_depth">grpc_ssl_verify_depth</a><br><a href="" id="summary"></a></li>
</ul>
</li>
</ul>
<p><code>ngx_http_grpc_module</code>模块允许将请求传递到 gRPC 服务器(1.13.10)。该模块需要<a href="http-ngx_http_v2_module.html">ngx_http_v2_module</a>模块。</p>
<p><a href="" id="example"></a></p>
<h4 id="example-configuration"><a href="#example-configuration" id="example-configuration"></a>Example Configuration</h4>
<pre><code class="hljs language-shell">server {
    listen 9000 http2;

    location / {
        grpc_pass 127.0.0.1:9000;
    }
}
</code></pre>
<p><a href="" id="directives"></a></p>
<h4 id="directives"><a href="#directives" id="directives"></a>Directives</h4>
<p><a href="" id="grpc_bind"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_bind address [transparent ] | off;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>到 gRPC 服务器的传出连接源自具有可选端口的指定本地 IP 地址。参数值可以包含变量。特殊值<code>off</code>取消了从先前的配置级别继承的<code>grpc_bind</code>指令的效果，这使系统可以自动分配本地 IP 地址和端口。</p>
<p><a href="" id="grpc_bind_transparent"></a></p>
<p><code>transparent</code>参数允许到 gRPC 服务器的传出连接来自 nonlocalIP 地址，例如，来自客户端的真实 IP 地址：</p>
<pre><code class="hljs language-shell">grpc_bind $remote_addr transparent;
</code></pre>
<p>为了使此参数起作用，通常必须使用<a href="ngx_core_module.html#user">superuser</a>特权运行 nginx worker 进程。在 Linux 上，不需要指定<code>transparent</code>参数，工作进程从主进程继承<code>CAP_NET_RAW</code>功能。还必须配置内核路由表以拦截来自 gRPC 服务器的网络流量。</p>
<p><a href="" id="grpc_buffer_size"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_buffer_size size;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_buffer_size 4k|8k;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置用于读取从 gRPC 服务器接收到的响应的缓冲区的<code>size</code>。收到响应后，该响应就会同步传递到客户端。</p>
<p><a href="" id="grpc_connect_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_connect_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_connect_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>定义用于与 gRPC 服务器构建连接的超时。请注意，此超时通常不能超过 75 秒。</p>
<p><a href="" id="grpc_hide_header"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_hide_header field;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>默认情况下，nginx 不会将 gRPC 服务器的响应中的 Headers 字段“日期”，“服务器”和“ X-Accel -...”传递给客户端。 <code>grpc_hide_header</code>指令设置了不会传递的其他字段。相反，如果需要允许传递字段，则可以使用<a href="#grpc_pass_header">grpc_pass_header</a>指令。</p>
<p><a href="" id="grpc_ignore_headers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ignore_headers field ...;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>禁用来自 gRPC 服务器的某些响应 Headers 字段的处理。可以忽略以下字段：“ X-Accel-Redirect”和“ X-Accel-Charset”。</p>
<p>如果未禁用，则处理这些头字段具有以下效果：</p>
<ul>
<li>
<p>“ X-Accel-Redirect”对指定的 URI 执行<a href="http-ngx_http_core_module.html#internal">internal redirect</a>；</p>
</li>
<li>
<p>“ X-Accel-Charset”设置所需的响应<a href="http-ngx_http_charset_module.html#charset">charset</a>。</p>
</li>
</ul>
<p><a href="" id="grpc_intercept_errors"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_intercept_errors on | off;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_intercept_errors off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>确定是否将代码大于或等于 300 的 gRPC 服务器响应传递给客户端，或者将其拦截并重定向到 nginx 以使用<a href="http-ngx_http_core_module.html#error_page">error_page</a>指令进行处理。</p>
<p><a href="" id="grpc_next_upstream"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_next_upstream error timeout;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>指定在哪种情况下将请求传递到下一个服务器：</p>
<ul>
<li>
<p><code>error</code></p>
<ul>
<li>与服务器构建连接，向服务器传递请求或读取响应头时发生错误；</li>
</ul>
</li>
<li>
<p><code>timeout</code></p>
<ul>
<li>与服务器构建连接，向服务器传递请求或读取响应 Headers 时发生超时；</li>
</ul>
</li>
<li>
<p><code>invalid_header</code></p>
<ul>
<li>服务器返回了空的或无效的响应；</li>
</ul>
</li>
<li>
<p><code>http_500</code></p>
<ul>
<li>服务器返回响应，代码为 500；</li>
</ul>
</li>
<li>
<p><code>http_502</code></p>
<ul>
<li>服务器返回响应码为 502；</li>
</ul>
</li>
<li>
<p><code>http_503</code></p>
<ul>
<li>服务器返回响应，代码为 503；</li>
</ul>
</li>
<li>
<p><code>http_504</code></p>
<ul>
<li>服务器返回代码为 504 的响应；</li>
</ul>
</li>
<li>
<p><code>http_403</code></p>
<ul>
<li>服务器返回响应，代码为 403；</li>
</ul>
</li>
<li>
<p><code>http_404</code></p>
<ul>
<li>服务器返回了代码为 404 的响应；</li>
</ul>
</li>
<li>
<p><code>http_429</code></p>
<ul>
<li>服务器返回响应，代码为 429；</li>
</ul>
</li>
</ul>
<h4 id="non-idempotent"><a href="#non_idempotent" id="non_idempotent"></a> non_idempotent</h4>
<ul>
<li>
<p>通常，如果请求已发送到上游服务器，则使用<a href="javascript:window.open('https://tools.ietf.org/html/rfc7231#section-4.2.2');" target="_blank" rel="noopener noreferrer">non-idempotent</a>方法(<code>POST</code>，<code>LOCK</code>，<code>PATCH</code>)的请求不会传递到下一个服务器。明确启用此选项将允许重试此类请求；</p>
</li>
<li>
<p><code>off</code></p>
<ul>
<li>禁用将请求传递到下一个服务器。</li>
</ul>
</li>
</ul>
<p>应该记住的是，只有在还没有任何内容发送给客户端的情况下，才有可能将请求传递给下一台服务器。即，如果在响应的传输过程中发生错误或超时，则无法解决该问题。</p>
<p>该指令还定义了与服务器通信的<a href="http-ngx_http_upstream_module.html#max_fails">unsuccessful attempt</a>。 <code>error</code>，<code>timeout</code>和<code>invalid_header</code>的情况始终被认为是失败的尝试，即使未在指令中指定它们也是如此。 <code>http_500</code>，<code>http_502</code>，<code>http_503</code>，<code>http_504</code>和<code>http_429</code>的情况只有在指令中指定时才被认为是不成功的尝试。绝不会将<code>http_403</code>和<code>http_404</code>的情况视为未成功的尝试。</p>
<p>将请求传递到下一个服务器可能受到<a href="#grpc_next_upstream_tries">尝试次数</a>和<a href="#grpc_next_upstream_timeout">time</a>的限制。</p>
<p><a href="" id="grpc_next_upstream_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_next_upstream_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_next_upstream_timeout 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>限制可以将请求传递到<a href="#grpc_next_upstream">next server</a>的时间。 <code>0</code>值关闭了此限制。</p>
<p><a href="" id="grpc_next_upstream_tries"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_next_upstream_tries number;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_next_upstream_tries 0;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>限制将请求传递到<a href="#grpc_next_upstream">next server</a>的可能尝试次数。 <code>0</code>值关闭了此限制。</p>
<p><a href="" id="grpc_pass"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_pass address;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>location</code> , <code>if in location</code></td></tr>
</tbody>
</table>
<p>设置 gRPC 服务器地址。该地址可以指定为域名或 IP 地址以及端口：</p>
<pre><code class="hljs language-shell">grpc_pass localhost:9000;
</code></pre>
<p>或作为 UNIX 域套接字路径：</p>
<pre><code class="hljs language-shell">grpc_pass unix:/tmp/grpc.socket;
</code></pre>
<p>或者，可以使用“ <code>grpc://</code>”方案：</p>
<pre><code class="hljs language-shell">grpc_pass grpc://127.0.0.1:9000;
</code></pre>
<p>要在 SSL 上使用 gRPC，应使用“ <code>grpcs://</code>”方案：</p>
<pre><code class="hljs language-shell">grpc_pass grpcs://127.0.0.1:443;
</code></pre>
<p>如果一个域名解析为多个地址，则所有这些地址都将以循环方式使用。另外，可以将地址指定为<a href="http-ngx_http_upstream_module.html">server group</a>。</p>
<p>参数值可以包含变量(1.17.8)。在这种情况下，如果将地址指定为域名，则在描述的<a href="http-ngx_http_upstream_module.html">server groups</a>中搜索该名称，如果找不到，则使用<a href="http-ngx_http_core_module.html#resolver">resolver</a>确定。</p>
<p><a href="" id="grpc_pass_header"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_pass_header field;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>允许将<a href="#grpc_hide_header">otherwise disabled</a>Headers 字段从 gRPC 服务器传递到客户端。</p>
<p><a href="" id="grpc_read_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_read_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_read_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>定义用于从 gRPC 服务器读取响应的超时。超时仅在两次连续的读取操作之间设置，而不用于传输整个响应。如果 gRPC 服务器在此时间内未传输任何内容，则连接将关闭。</p>
<p><a href="" id="grpc_send_timeout"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_send_timeout time;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_send_timeout 60s;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>设置将请求传输到 gRPC 服务器的超时。超时仅在两个连续的写操作之间设置，而不用于整个请求的传输。如果 gRPC 服务器在此时间内未收到任何信息，则连接将关闭。</p>
<p><a href="" id="grpc_set_header"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_set_header field value;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_set_header Content-Length $content_length;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>允许将字段重新定义或附加到 gRPC 服务器的请求 Headers<a href="#grpc_pass_request_headers">passed</a>。 <code>value</code>可以包含文本，变量及其组合。当且仅当当前级别上未定义<code>grpc_set_header</code>指令时，这些指令才从上一级继承。</p>
<p>如果 Headers 字段的值为空字符串，则该字段将不会传递到  gRPC 服务器：</p>
<pre><code class="hljs language-shell">grpc_set_header Accept-Encoding &quot;&quot;;
</code></pre>
<p><a href="" id="grpc_socket_keepalive"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_socket_keepalive on | off;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_socket_keepalive off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>该指令出现在 1.15.6 版中。</p>
<p>为与 gRPC 服务器的传出连接配置“ TCP keepalive”行为。默认情况下，os 的设置对套接字有效。如果伪指令设置为值“ <code>on</code>”，则将为套接字打开<code>SO_KEEPALIVE</code>套接字选项。</p>
<p><a href="" id="grpc_ssl_certificate"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_certificate file;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>使用用于对 gRPC SSL 服务器进行身份验证的 PEM 格式的证书指定<code>file</code>。</p>
<p><a href="" id="grpc_ssl_certificate_key"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_certificate_key file;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>使用用于对 gRPC SSL 服务器进行身份验证的 PEM 格式的密钥指定一个<code>file</code>。</p>
<p>可以指定值<code>engine</code>：<code>name</code>：<code>id</code>而不是<code>file</code>，后者从 OpenSSL 引擎<code>name</code>加载具有指定<code>id</code>的密钥。</p>
<p><a href="" id="grpc_ssl_ciphers"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_ciphers ciphers;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_ciphers DEFAULT;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>指定对 gRPC SSL 服务器的请求的启用密码。密码以 OpenSSL 库可以理解的格式指定。</p>
<p>可以使用“ <code>openssl ciphers</code>”命令查看完整列表。</p>
<p><a href="" id="grpc_ssl_crl"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_crl file;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>使用 PEM 格式指定<code>file</code>带有已吊销证书(CRL)的证书，用于<a href="#grpc_ssl_verify">verify</a> gRPC SSL 服务器的证书。</p>
<p><a href="" id="grpc_ssl_name"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_name name;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_name host from grpc_pass;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>与 gRPC SSL 服务器构建连接时，允许覆盖用于<a href="#grpc_ssl_verify">verify</a> gRPC SSL 服务器的证书和<a href="#grpc_ssl_server_name">通过 SNI</a>的服务器名称。</p>
<p>默认情况下，使用<a href="#grpc_pass">grpc_pass</a>的主机部分。</p>
<p><a href="" id="grpc_ssl_password_file"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_password_file file;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>指定一个带有<a href="#grpc_ssl_certificate_key">secret keys</a>密码短语的<code>file</code>，其中每个密码短语都在单独的行上指定。加载密钥时依次尝试使用密码短语。</p>
<p><a href="" id="grpc_ssl_protocols"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>为对 gRPC SSL 服务器的请求启用指定的协议。</p>
<p><a href="" id="grpc_ssl_server_name"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_server_name on | off;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_server_name off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>与 gRPC SSL 服务器构建连接时，启用或禁用通过<a href="javascript:window.open('https://en.wikipedia.org/wiki/Server_Name_Indication');" target="_blank" rel="noopener noreferrer">TLS 服务器名称指示扩展</a>(SNI，RFC 6066)传递服务器名称。</p>
<p><a href="" id="grpc_ssl_session_reuse"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_session_reuse on | off;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_session_reuse on;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>确定使用 gRPC 服务器时是否可以重用 SSL 会话。如果日志中出现错误“ <code>SSL3_GET_FINISHED:digest check failed</code>”，请尝试禁用会话重用。</p>
<p><a href="" id="grpc_ssl_trusted_certificate"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_trusted_certificate file;</code></td></tr>
<tr><td>Default:</td><td>—</td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>指定<code>file</code>带有 PEM 格式的受信任 CA 证书，用于<a href="#grpc_ssl_verify">verify</a> gRPC SSL 服务器的证书。</p>
<p><a href="" id="grpc_ssl_verify"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_verify on | off;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_verify off;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>启用或禁用 gRPC SSL 服务器证书的验证。</p>
<p><a href="" id="grpc_ssl_verify_depth"></a></p>
<table>
<thead></thead>
<tbody>
<tr><td>Syntax:</td><td><code>grpc_ssl_verify_depth number;</code></td></tr>
<tr><td>Default:</td><td><code>grpc_ssl_verify_depth 1;</code></td></tr>
<tr><td>Context:</td><td><code>http</code> , <code>server</code> , <code>location</code></td></tr>
</tbody>
</table>
<p>在 gRPC SSL 服务器证书链中设置验证深度。</p>
</div>
</div>
</section>
<div class="right-sidebar">
<div class="affix"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6108808167664152" data-ad-slot="3102929424" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
</div>
</div>
<div class="ft">
<a href="#toolbar-title" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a>
<footer class="footer">
<div class="footer__container--normal">
<img alt="扫码关注公众号" title="扫码关注公众号" src="static/picture/qr-code.png" width="170" height="170">
<div class="footer__description--normal">
<p class="paragraph footer__author--normal">Docs4dev<sup class="super">&#xAE;</sup>
</p>
<p class="paragraph footer__quote&#45;&#45;normal">
如果你在使用过程中遇到任何问题，可以在 <a href="javascript:window.open('https://github.com/docs4dev/docs4dev-issues');" target="_blank" rel="noopener noreferrer">这里<i class="fa fa-external-link"></i></a> 提issue。
</p>
<div class="footer__main--normal">
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
<a href="javascript:window.open('https://beian.miit.gov.cn/');">
蜀ICP备14021783号-6
</a>
</p>
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
Copyright &#xA9; Docs4dev all
right reserved, powered by <a href="index2.html" target="_blank">Docs4dev</a></p>
</div>
</div>
</div>
<div class="box__issues">
</div>
</footer>
</div>
</div>
</div>
</div>
</div>
<script>
  var hasToc = true;
  /*  var downloadable = /!*false*!/ false;
    var editable = /!*false*!/ false;
    var code = /!*"nginx"*!/ false;
    var version = /!*"current"*!/ false;
    var type = /!*"reference"*!/ false;
    var lang = /!*"zh"*!/ 'en';
    //edit link
    require(["gitbook", "jQuery"], function (gitbook, $) {
      gitbook.events.bind('start', function (e, config) {
        // Add edit toolbar to left
        var chapterId = /!*17700*!/ 0;
        if (downloadable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-download',
            text: '下载',
            onClick: function () {
              window.open('/download?code=' + code + '&version=' + version + '&type=' + type + '&lang=' + lang);
            }
          });
        }
        if (editable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-edit',
            text: '编辑此页',
            onClick: function () {
              window.open('/docs/edit?chapterId=' + chapterId + '&lang=' + lang);
            }
          });
        }
      });
    });*/
</script>
<script>
    var code = "nginx";
    var lang = "zh";
  </script>

<script src="static/js/autocomplete-js.js"></script>
<script src="static/js/app.min.js"></script>
<script src="static/js/search.min.js"></script>
</body>
</html>
